{
  lib,
  stdenv,
  fetchFromGitHub,
  perlPackages,
  wrapGAppsHook3,
  imagemagick,
  gdk-pixbuf,
  librsvg,
  hicolor-icon-theme,
  procps,
  libwnck,
  libappindicator-gtk3,
  xdg-utils,
}:

let
  perlModules = with perlPackages; [
    ImageMagick
    Cairo
    FileBaseDir
    FileWhich
    FileCopyRecursive
    XMLSimple
    XMLTwig
    XMLParser
    SortNaturally
    LocaleGettext
    ProcProcessTable
    X11Protocol
    ProcSimple
    ImageExifTool
    JSON
    JSONMaybeXS
    NetOAuth
    PathClass
    LWP
    LWPProtocolHttps
    NetDBus
    TryTiny
    WWWMechanize
    HTTPMessage
    HTTPDate
    HTMLForm
    HTMLParser
    HTMLTagset
    HTTPCookies
    EncodeLocale
    URI
    CarpAlways
    GlibObjectIntrospection
    NumberBytesHuman
    CairoGObject
    Readonly
    Gtk3ImageView
    Gtk3
    Glib
    Pango
    GooCanvas2
    GooCanvas2CairoTypes
    commonsense
    TypesSerialiser
  ];
in
stdenv.mkDerivation rec {
  pname = "shutter";
  version = "0.99.2";

  src = fetchFromGitHub {
    owner = "shutter-project";
    repo = "shutter";
    rev = "v${version}";
    sha256 = "sha256-o95skSr6rszh0wsHQTpu1GjqCDmde7aygIP+i4XQW9A=";
  };

  nativeBuildInputs = [ wrapGAppsHook3 ];
  buildInputs = [
    perlPackages.perl
    procps
    gdk-pixbuf
    librsvg
    libwnck
    libappindicator-gtk3
    hicolor-icon-theme
  ]
  ++ perlModules;

  makeFlags = [
    "prefix=${placeholder "out"}"
  ];

  postPatch = ''
    patchShebangs po2mo.sh
  '';

  preFixup = ''
    # make xdg-open overrideable at runtime
    gappsWrapperArgs+=(
      --set PERL5LIB ${perlPackages.makePerlPath perlModules} \
      --prefix PATH : ${lib.makeBinPath [ imagemagick ]}
      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
    )
  '';

  meta = with lib; {
    description = "Screenshot and annotation tool";
    mainProgram = "shutter";
    homepage = "https://shutter-project.org/";
    license = licenses.gpl3Plus;
    platforms = platforms.all;
    maintainers = [ maintainers.bjornfor ];
  };
}
